package ru.chaykin.rendering;

import ru.chaykin.primitives.Circle;

public abstract class CullingThread extends Thread {
	
	protected int indNum = 0; //Номер записи в индексном массиве
	protected int indTotalNum = 0; //Общее количество записей в индексном массиве (будет меняться по мере распарсивания)
	
	//protected float[] c_info = new float[3];	//Возможно и быдлокод, но сделано в целях ускорения работы: чтобы не объявлять переменную на каждой итерации цикла
	
	/**
	 * Окружность, описанная вокруг объекта
	 */
	protected Circle bCircle;
	
	/**
	 * Область, видимая на экране (Окружность, описанная вокруг прямоугольника экрана)
	 */
	protected static volatile Circle ra;
	
	protected int offset = 0;	//Смещение от начала блока данный об объекте
	
	protected boolean foundVisibleObject;	
	
	protected volatile boolean isActive = true;	//Если false, остановим поток
	
	/**
	 * Обновляет переменные потока, хранящие область видимости
	 */
	public static final synchronized void updateRenderedArea(float x, float y, float r) {
		ra = new Circle(x, y, r);
	}
	
	public static final synchronized void updateRenderedArea(float x, float y) {
		ra.reInit_xy(x, y);
	}
	
	public static final synchronized void updateRenderedArea(float r) {
		ra.reInit_r(r);
	}
	
	public static Circle getRenderedArea() {
		return ra;
	}
	
	public void stopThread() {
		isActive = false;
	} 
}
